/*
 *   Time Tracking Web Application
 *   Copyright (C) 2008, Nick Griffiths
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *   
 *   Contact nicobrevin at gmail dot com
 *   http://code.google.com/p/openharvest/
 */

package org.brevs.time.action;

import java.util.List;

import org.appfuse.webapp.action.BaseAction;
import org.brevs.time.manager.ProjectManager;
import org.brevs.time.manager.TimeManager;
import org.brevs.time.model.Project;
import org.brevs.time.model.ProjectCategory;

public class ProjectAdminAction extends BaseAction {

	public static class Dependencies {
		private TimeManager timeManager;
		private ProjectManager projectManager;
		public void setTimeManager(TimeManager timeManager) {
			this.timeManager = timeManager;
		}
	}
	
	private TimeManager timeManager;
	
	private List<Project> projects;
	
	private Long id;

	private Project project;

	private List<ProjectCategory> categories;

	private ProjectManager projectManager;
	
	public ProjectAdminAction(Dependencies dependencies) {
		this.timeManager = dependencies.timeManager;
		this.projectManager = dependencies.projectManager;
	}
	
	//---- Model
	
	public List<Project> getProjects() {
		return projects;
	}
	
	public Project getProject() {
		return project;
	}
	
	public void setProject(Project project) {
		this.project = project;
	}
	
	public void setCategories(List<ProjectCategory> categories) {
		this.categories = categories;
	}	
	
	public void setId(Long id) {
		this.id = id;
	}
	
	public Long getId() {
		return id;
	}
	
	public void setProjectCategories(List<ProjectCategory> categories) {
		this.categories = categories;
	}
	
	//---- Actions
	
	public String list() {
		this.projects = timeManager.getProjects(null);
		return SUCCESS;
	}
	
	public String edit() {
		this.project = id == null ? new Project() : timeManager.getProject(id);
		return SUCCESS;
	}
	
	public String save() {
		if (this.project != null) {
			
			for (ProjectCategory category : this.categories) {
				this.project.addCategory(category);
			}
			
			projectManager.saveProject(this.project);
		}
		return SUCCESS;
	}
}
